package com.cnbot.toolkit.log.zlog;

import android.os.Environment;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *  @项目名：  ToolKitModel
 *  @包名：    com.cnbot.toolkit.log.zlog
 *  @文件名:   DefaultLogFileStrategy
 *  @创建者:   ww
 *  @创建时间:  2019/12/16 10:12
 *  @描述：    默认文件配置策略
 */
public class DefaultLogFileStrategy implements ILogFileStrategy {

	private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

	/**
	 * 限制单个文件3M
	 * @return
	 */
	@Override
	public int getSingleFileLimitMaxLength() {
		return 3145728;
	}

	@Override
	public int limitMaxCountsInDirectory() {
		return 0;
	}

	@Override
	public String getFileStorageDirectory() {
		return Environment.getExternalStorageDirectory() + File.separator + "LOG" + File.separator + "zlog";
	}

	@Override
	public String getLastLogFilePath() {
		return getLastLogFileName(getFileStorageDirectory() + File.separator + formatter.format(new Date()));
	}

	/**
	 * 获取上一个日志文件的名字
	 * @param dir /LOG/zlog/yyyy-MM-dd
	 * @return
	 */
	public String getLastLogFileName(String dir) {
		File file = new File(dir);
		//文件夹是否存在
		if (!file.exists()) {
			return String.format("%s/%s.txt", dir, 1);
		}
		//列出文件夹下的文件列表
		String[] fileArray = file.list();
		if (fileArray == null || fileArray.length == 0) {
			return String.format("%s/%s.txt", dir, 1);
		}
		int lastLogCount = fileArray.length;
		bubbleSort(fileArray);
		//拿到最新的一个文件
		String lastFileName = fileArray[lastLogCount - 1];
		//单个文件超过3M
		if ((new File(String.format("%s/%s", dir, lastFileName))).length() > getSingleFileLimitMaxLength()) {
			//否则新增
			String[] split = lastFileName.split("\\.");
			int sum = Integer.parseInt(split[0]);
			return String.format("%s/%s.txt", dir, ++sum);

		} else {
			return String.format("%s/%s", dir, lastFileName);
		}

	}

	private void bubbleSort(String[] arr) {
		//外层循环控制排序趟数
		int count, temp;
		for (int i = 0; i < arr.length - 1; i++) {
			//内层循环控制每一趟排序多少次
			for (int j = 0; j < arr.length - 1 - i; j++) {
				count = parse(arr[j]);
				temp = parse(arr[j + 1]);
				if (count > temp) {
					String tempStr = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = tempStr;
				}
			}
		}
	}

	private int parse(String name) {
		int end = name.indexOf(".");
		return Integer.parseInt(name.substring(0, end));
	}
}
